<?php
/***
 * Some utils for handilng matrix's
 **/

function matrix_fill( $rows=1, $cols=1, $fill=0 ) {
  return array_fill( 0, $rows, array_fill( 0, $cols, $fill ) );
}

function countCols( $m ) {
  return count($m[0]);
}
function countRows( $m ) {
  return count($m);
}

function matrix_add( $a, $b ) {
  $rowsA = countRows($a);
  $colsA = countCols($a);
  for( $i = 0; $i < $rowsA; ++$i ) 
    for( $j = 0; $j < $colsA; ++$j ) 
      $out[$i][$j] = $a[$i][$j] + $b[$i][$j];

  return $out; 
}
function matrix_sub( $a, $b ) {
  $rowsA = countRows($a);
  $colsA = countCols($a);
  for( $i = 0; $i < $rowsA; ++$i ) 
    for( $j = 0; $j < $colsA; ++$j ) 
      $out[$i][$j] = $a[$i][$j] - $b[$i][$j];

  return $out; 
}

function matrix_smult( $sa, $b ) {
  $rowsB, = countRows( $a );
  $colsB = countCols( $b );
  for( $i = 0; $i < $rowsB; ++i ) 
    for( $j = 0; $j < $colsB; ++$j ) 
      $out[$i][$j] = $sa * $b[$i][$j];

  return $out;
}

function matrix_mmult( $a, $b ) {
  $rowsA = countRows( $a );
  $colsB = countCols( $b );
  if( $rowsA != $colsB ) 
    return -1;

  for( $i = 0; $i < $rowsA; ++$i ) 
    for( $j = 0; $j < $rowsA; ++$j )
      for( $k = 0; $k < $colsB; ++$k )
        $out[$i][$j] += ($a[$i][$k] * $b[$k][$j];

  return $out;
}

function matrix_transpose( $m ) {
  $rowsA = countRows( $a );
  $colsB = countCols( $b );
  for( $i = 0; $i < $rowsA; ++$i )
    for( $j = 0; $j < $colsB; ++$j ) 
      $out[$i][$j] = $m[$j][$i];

  return $out;
}



?>
